package com.fly.iterate.dir;

/**
 * FileName: IterateDir
 *
 * @author Pretty_Boy
 * @version 1.00
 * @desc
 * @date 2018/10/18 10:30
 */

import java.io.File;
import java.io.IOException;

public class IterateDir {

    private static int depth = 1;

    public static void find(String pathName, int depth) throws IOException {
        int filecount = 0;
        //获取pathName的File对象
        File dirFile = new File(pathName);
        //判断该文件或目录是否存在，不存在时在控制台输出提醒
        if (!dirFile.exists()) {
            System.out.println("do not exit");
            return;
        }
        //判断如果不是一个目录，就判断是不是一个文件，是文件则输出文件路径
        if (!dirFile.isDirectory()) {
            if (dirFile.isFile()) {
                System.out.println(dirFile.getCanonicalFile());
            }
            return;
        }



        for (int j = 0; j < depth; j++) {
            System.out.print("  ");
        }
        System.out.print("|--");
        System.out.println(dirFile.getName());
        //获取此目录下的所有文件名与目录名
        String[] fileList = dirFile.list();
        int currentDepth = depth + 1;
        for (int i = 0; i < fileList.length; i++) {
            //遍历文件目录
            String string = fileList[i];
            //File("documentName","fileName")是File的另一个构造器
            File file = new File(dirFile.getPath(), string);
            String name = file.getName();
            //如果是一个目录，搜索深度depth++，输出目录名后，进行递归
            if (file.isDirectory()) {
                if (file.getName().equalsIgnoreCase("CVS")) {
                    //直接通过File对象的delette方法删除，必须是空文件夹，所以需要先删除文件夹中的所有文件！！！
                    File[] subfile = file.listFiles();
                    for (File file1 : subfile) {
                        file1.delete();
                    }
                    boolean ifDelete = file.delete();
                    System.out.println("是否删除文件成功？" + ifDelete + file.getName());
                    continue;
                }
                //递归
                find(file.getCanonicalPath(), currentDepth);
            } else {
                //如果是文件，则直接输出文件名
                for (int j = 0; j < currentDepth; j++) {
                    System.out.print("   ");
                }
                System.out.print("|--");
                System.out.println(name);

            }
        }
    }

    public static void main(String[] args) throws IOException {
        find("D:\\___Developer___\\All_WorkSpace\\GanSu\\EcardInterface", depth);
    }
}
